package user

import java.util.Date

import user.Tutor;
import grails.test.ControllerUnitTestCase

class TutorControllerTests extends ControllerUnitTestCase {
	
	private String NAME_1 = "João"
	private String SOBRENOME_1 = "Silva"
	private String LOGIN_1 = "joaosilva12"
	private String PASSWORD_1 = "abc123"
	private String EMAIL_1 = "joaosilva12@dsc.ufcg.edu.br"
	private Date ADMISSION_1 = new Date()
	private String TITULACAO_1 = "Doutor"
	
	protected void setUp() {
		super.setUp()
	}
	
	protected void tearDown() {
		super.tearDown()
	}
	
	void testIndex() {
		controller.index();
		assertEquals "users", controller.redirectArgs.controller
		assertEquals "POST", controller.allowedMethods.save
		assertEquals "POST", controller.allowedMethods.update
		assertEquals "POST", controller.allowedMethods.delete
	}
	
    void testList() {
        mockDomain(Tutor, [ new Tutor(id:1, nome: "João", sobrenome:"Aleixo", 
        								  email: "joao@email.com", login:"joao", password: "abc123", admission:new Date(), titulacao:"Mestre"),
        					  new Tutor(id:2, nome: "Maria", sobrenome:"Aleixo", 
    									  email: "maria@email.com", login:"maria", password: "abc123", admission:new Date(), titulacao:"Doutora")])
        assertEquals 2, Tutor.count()
    }
    
    void testEdit() {
    	mockDomain(Tutor, [ new Tutor(id:1, nome: "João", sobrenome:"Aleixo", 
				  email: "joao@email.com", login:"joao", password: "abc123", admission:new Date(), titulacao:"Mestre")])
		mockParams.id = 1
		def model = controller.edit(id:1)
		assertEquals 1, model.id
        assertEquals "João", model.nome
        assertEquals "Aleixo", model.TutorInstance.sobrenome
        assertEquals "joao@email.com", model.TutorInstance.email
        assertEquals 22, model.TutorInstance.idade
    }

    void testCreate() {
    	def params = [id:1, nome: "João", sobrenome:"Aleixo", 
				  email: "joao@email.com", login:"joao", password: "abc123", admission:new Date(), titulacao:"Mestre"]
    	mockDomain(Tutor, [ new Tutor(id:1, nome: "João", sobrenome:"Aleixo", 
				  email: "joao@email.com", login:"joao", password: "abc123", admission:new Date(), titulacao:"Mestre") ])
    	def model = controller.create(params)
    	assertNotNull model
    }

    void testSave() {
    	mockDomain(Tutor, [ new Tutor(id:1, nome: "João", sobrenome:"Aleixo", 
				  						  email: "joao@email.com", idade:22) ])
        mockParams.nome = "Maria"
        mockParams.sobrenome = "Aleixo"
        mockParams.email = "maria@email.com"
        mockParams.idade = 20
        
        controller.save()
        
        def model = controller.list()
        assertEquals 2, model.TutorInstanceTotal
    }
    
    void testDelete() {
    	mockDomain(Tutor, [ new Tutor(id:1, nome: "João", sobrenome:"Aleixo", 
				  						  email: "joao@email.com", idade:22),
				  			  new Tutor(id:2, nome: "Maria", sobrenome:"Aleixo", 
				  					  	  email: "maria@email.com", idade:20)] )
        mockParams.id = 1
        
        controller.delete()
        
        def model = controller.list()
        assertEquals 1, model.TutorInstanceTotal
    }
    
    void testUpdate() {
    	mockDomain(Tutor, [ new Tutor(id:1, nome: "João", sobrenome:"Aleixo", 
						  				  email: "joao@email.com", idade:22),
						  	  new Tutor(id:2, nome: "Maria", sobrenome:"Aleixo", 
						  			  email: "maria@email.com", idade:20)] )
		mockParams.id = 2
		def model = controller.edit()
		
		mockParams.id = model.TutorInstance.id
		mockParams.nome = model.TutorInstance.nome
        mockParams.sobrenome = model.TutorInstance.sobrenome
        mockParams.email = model.TutorInstance.email
        mockParams.idade = 21
		
        controller.update()
		
        mockParams.id = 2
		model = controller.show()
		assertEquals 2, model.TutorInstance.id
        assertEquals "Maria", model.TutorInstance.nome
        assertEquals "Aleixo", model.TutorInstance.sobrenome
        assertEquals "maria@email.com", model.TutorInstance.email
        assertEquals 21, model.TutorInstance.idade
    }
	
}
